/* model */
import MsgModel from "@model/MsgModel"
import { 
  BaseSelectUserMultiDepartmentAndUserOptionsType,
  BaseSelectUserMultiDepartmentOptionsType, 
  BaseSelectUserMultiAllOptionsType, 
  BaseSelectUserMultiUserOptionsType, 
  BaseSelectUserResult, 
  BaseSelectUserSingleUserOptionsType 
} from "@src/component/common/BaseSelectUser"

type VueProtoTypeFastType = {
  select: VueProtoTypeFastSelectType;
}

type VueProtoTypeFastSelectType = {
  single: {
    user: VueProtoTypeFastSelectUserType;
  },
  multi: {
    user: VueProtoTypeFastSelectMultiUserType;
    department: VueProtoTypeFastSelectMultiDepartmentType;
    departmentAndUser: VueProtoTypeFastSelectMultiDepartmentAndUserType;
    all: VueProtoTypeFastSelectAllType;
  }
}

type VueProtoTypeFastSelectResultType = Promise<MsgModel<BaseSelectUserResult>>

type VueProtoTypeFastSelectUserType = (options: BaseSelectUserSingleUserOptionsType) => VueProtoTypeFastSelectResultType;

type VueProtoTypeFastSelectMultiUserType = (options: BaseSelectUserMultiUserOptionsType) => VueProtoTypeFastSelectResultType;

type VueProtoTypeFastSelectMultiDepartmentType = (options: BaseSelectUserMultiDepartmentOptionsType) => VueProtoTypeFastSelectResultType;

type VueProtoTypeFastSelectMultiDepartmentAndUserType = (options: BaseSelectUserMultiDepartmentAndUserOptionsType) => VueProtoTypeFastSelectResultType;

type VueProtoTypeFastSelectAllType = (options: BaseSelectUserMultiAllOptionsType) => VueProtoTypeFastSelectResultType;

export {
  VueProtoTypeFastType,
  VueProtoTypeFastSelectType,
}